Python Python 对图像进行Base64编码及解码读取为numpy、opencv、matplot需要的格式

说明

Python 对图像进行base64编码及解码读取为numpy、opencv、matplot需要的格式

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
# 对图片进行base64编码,解码,解码为numpy,opencv,matplot照片
# USAGE
# python base64_2_jpg.py

import base64

import cv2
import numpy as np
from matplotlib import pyplot as plt


# 将字符串写入文字
# name 图片名
# base64_data 图片二进制编码后string流
def write2txt(name, base64_data):
# 写入_base64.txt
print(name)
print(name,len(base64_data))
basef = open(name + '_base64.txt', 'w')
data = 'data:image/jpg;base64,%s' % base64_data
# print(data)
basef.write(base64_data)
basef.close()


# 编码图像为base64字符串
def encode_base64(file):
with open(file, 'rb') as f:
img_data = f.read()
base64_data = base64.b64encode(img_data)
print(type(base64_data))
# print(base64_data)
# 如果想要在浏览器上访问base64格式图片,需要在前面加上:data:image/jpeg;base64,
base64_str = str(base64_data, 'utf-8')
# print(base64_str)
print(len(base64_data))
write2txt(file.replace(".jpg", ""), base64_str)
return base64_data


# 解码base64字符串为图像,并保存
def decode_base64(base64_data):
with open('./images/base64.jpg', 'wb') as file:
img = base64.b64decode(base64_data)
file.write(img)


# 解码base64字符串为numpy图像、opencv、matplot图像

# 解码base64字符串为numpy图像
def decode_base64_np_img(base64_data):
img = base64.b64decode(base64_data)
img_array = np.fromstring(img, np.uint8) # 转换np序列
print('numpy: ', img_array.shape)
cv2.imshow("img", img_array)
cv2.waitKey(0)


# 解码base64字符串为opencv图像
def decode_base64_cv_img(base64_data):
img = base64.b64decode(base64_data)
img_array = np.fromstring(img, np.uint8) # 转换np序列
img_raw = cv2.imdecode(img_array, cv2.IMREAD_COLOR) # 转换Opencv格式BGR
img_gray = cv2.imdecode(img_array, cv2.IMREAD_GRAYSCALE) # 转换灰度图

print('opencv bgr: ', img_raw.shape)
print('opencv gray: ', img_gray.shape)

cv2.imshow("img bgr", img_raw)
cv2.imshow("img gray", img_gray)
cv2.waitKey(0)


# 解码base64字符串为matplot图像
def decode_base64_matplot_img(base64_data):
img = base64.b64decode(base64_data)
img_array = np.fromstring(img, np.uint8) # 转换np序列
img_raw = cv2.imdecode(img_array, cv2.IMREAD_COLOR) # 转换Opencv格式BGR
img_matplot = cv2.cvtColor(img_raw, cv2.COLOR_BGR2RGB) # BGR转RGB

img_gray = cv2.imdecode(img_array, cv2.IMREAD_GRAYSCALE) # 转换灰度图
imggray_matplot = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2RGB) # 灰度图转RGB
plt.figure()
plt.title("Matplot RGB Origin Image")
plt.axis("off")
plt.imshow(img_matplot)

plt.figure()
plt.title("Matplot Gray Origin Image")
plt.axis("off")
plt.imshow(imggray_matplot)
plt.show()
print("111")


if __name__ == '__main__':
img_path = './testworkfour/data/Chinese Medicine/dangshen/dangshen_6.jpg'
base64_data = encode_base64(img_path)
decode_base64(base64_data)

decode_base64_np_img(base64_data)
decode_base64_cv_img(base64_data)
decode_base64_matplot_img(base64_data)



# base64 的 Image.open
# from PIL import Image
# import io
# img = base64.b64decode(img_base64)
# buffer = io.BytesIO()
# img = Image.open(io.BytesIO(img))

# base64 的 Image.open等价于如下代码
# img = Image.open(img_path)

一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;

继开 wechat
欢迎加我的微信,共同交流技术